/*
 * Copyright [2013-2021], Alibaba Group Holding Limited
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.alibaba.polardbx.executor.handler.subhandler;

import com.alibaba.polardbx.executor.cursor.Cursor;
import com.alibaba.polardbx.executor.cursor.impl.ArrayResultCursor;
import com.alibaba.polardbx.executor.handler.VirtualViewHandler;
import com.alibaba.polardbx.optimizer.context.ExecutionContext;
import com.alibaba.polardbx.optimizer.view.InformationSchemaKeywords;
import com.alibaba.polardbx.optimizer.view.VirtualView;

/**
 * @author shengyu
 */
public class InformationSchemaKeywordsHandler extends BaseVirtualViewSubClassHandler {

    public InformationSchemaKeywordsHandler(VirtualViewHandler virtualViewHandler) {
        super(virtualViewHandler);
    }

    @Override
    public boolean isSupport(VirtualView virtualView) {
        return virtualView instanceof InformationSchemaKeywords;
    }

    @Override
    public Cursor handle(VirtualView virtualView, ExecutionContext executionContext, ArrayResultCursor cursor) {
        InformationSchemaKeywords informationSchemaKeywords = (InformationSchemaKeywords) virtualView;
        cursor.addRow(new Object[] {"ACCESSIBLE", 1});
        cursor.addRow(new Object[] {"ACCOUNT", 0});
        cursor.addRow(new Object[] {"ACTION", 0});
        cursor.addRow(new Object[] {"ACTIVE", 0});
        cursor.addRow(new Object[] {"ADD", 1});
        cursor.addRow(new Object[] {"ADMIN", 0});
        cursor.addRow(new Object[] {"AFTER", 0});
        cursor.addRow(new Object[] {"AGAINST", 0});
        cursor.addRow(new Object[] {"AGGREGATE", 0});
        cursor.addRow(new Object[] {"ALGORITHM", 0});
        cursor.addRow(new Object[] {"ALL", 1});
        cursor.addRow(new Object[] {"ALTER", 1});
        cursor.addRow(new Object[] {"ALWAYS", 0});
        cursor.addRow(new Object[] {"ANALYZE", 1});
        cursor.addRow(new Object[] {"AND", 1});
        cursor.addRow(new Object[] {"ANY", 0});
        cursor.addRow(new Object[] {"AS", 1});
        cursor.addRow(new Object[] {"ASC", 1});
        cursor.addRow(new Object[] {"ASCII", 0});
        cursor.addRow(new Object[] {"ASENSITIVE", 1});
        cursor.addRow(new Object[] {"AT", 0});
        cursor.addRow(new Object[] {"AUTOEXTEND_SIZE", 0});
        cursor.addRow(new Object[] {"AUTO_INCREMENT", 0});
        cursor.addRow(new Object[] {"AVG", 0});
        cursor.addRow(new Object[] {"AVG_ROW_LENGTH", 0});
        cursor.addRow(new Object[] {"BACKUP", 0});
        cursor.addRow(new Object[] {"BEFORE", 1});
        cursor.addRow(new Object[] {"BEGIN", 0});
        cursor.addRow(new Object[] {"BETWEEN", 1});
        cursor.addRow(new Object[] {"BIGINT", 1});
        cursor.addRow(new Object[] {"BINARY", 1});
        cursor.addRow(new Object[] {"BINLOG", 0});
        cursor.addRow(new Object[] {"BIT", 0});
        cursor.addRow(new Object[] {"BLOB", 1});
        cursor.addRow(new Object[] {"BLOCK", 0});
        cursor.addRow(new Object[] {"BOOL", 0});
        cursor.addRow(new Object[] {"BOOLEAN", 0});
        cursor.addRow(new Object[] {"BOTH", 1});
        cursor.addRow(new Object[] {"BTREE", 0});
        cursor.addRow(new Object[] {"BUCKETS", 0});
        cursor.addRow(new Object[] {"BY", 1});
        cursor.addRow(new Object[] {"BYTE", 0});
        cursor.addRow(new Object[] {"CACHE", 0});
        cursor.addRow(new Object[] {"CALL", 1});
        cursor.addRow(new Object[] {"CASCADE", 1});
        cursor.addRow(new Object[] {"CASCADED", 0});
        cursor.addRow(new Object[] {"CASE", 1});
        cursor.addRow(new Object[] {"CATALOG_NAME", 0});
        cursor.addRow(new Object[] {"CHAIN", 0});
        cursor.addRow(new Object[] {"CHANGE", 1});
        cursor.addRow(new Object[] {"CHANGED", 0});
        cursor.addRow(new Object[] {"CHANNEL", 0});
        cursor.addRow(new Object[] {"CHAR", 1});
        cursor.addRow(new Object[] {"CHARACTER", 1});
        cursor.addRow(new Object[] {"CHARSET", 0});
        cursor.addRow(new Object[] {"CHECK", 1});
        cursor.addRow(new Object[] {"CHECKSUM", 0});
        cursor.addRow(new Object[] {"CIPHER", 0});
        cursor.addRow(new Object[] {"CLASS_ORIGIN", 0});
        cursor.addRow(new Object[] {"CLIENT", 0});
        cursor.addRow(new Object[] {"CLONE", 0});
        cursor.addRow(new Object[] {"CLOSE", 0});
        cursor.addRow(new Object[] {"COALESCE", 0});
        cursor.addRow(new Object[] {"CODE", 0});
        cursor.addRow(new Object[] {"COLLATE", 1});
        cursor.addRow(new Object[] {"COLLATION", 0});
        cursor.addRow(new Object[] {"COLUMN", 1});
        cursor.addRow(new Object[] {"COLUMNS", 0});
        cursor.addRow(new Object[] {"COLUMN_FORMAT", 0});
        cursor.addRow(new Object[] {"COLUMN_NAME", 0});
        cursor.addRow(new Object[] {"COMMENT", 0});
        cursor.addRow(new Object[] {"COMMIT", 0});
        cursor.addRow(new Object[] {"COMMITTED", 0});
        cursor.addRow(new Object[] {"COMPACT", 0});
        cursor.addRow(new Object[] {"COMPLETION", 0});
        cursor.addRow(new Object[] {"COMPONENT", 0});
        cursor.addRow(new Object[] {"COMPRESSED", 0});
        cursor.addRow(new Object[] {"COMPRESSION", 0});
        cursor.addRow(new Object[] {"CONCURRENT", 0});
        cursor.addRow(new Object[] {"CONDITION", 1});
        cursor.addRow(new Object[] {"CONNECTION", 0});
        cursor.addRow(new Object[] {"CONSISTENT", 0});
        cursor.addRow(new Object[] {"CONSTRAINT", 1});
        cursor.addRow(new Object[] {"CONSTRAINT_CATALOG", 0});
        cursor.addRow(new Object[] {"CONSTRAINT_NAME", 0});
        cursor.addRow(new Object[] {"CONSTRAINT_SCHEMA", 0});
        cursor.addRow(new Object[] {"CONTAINS", 0});
        cursor.addRow(new Object[] {"CONTEXT", 0});
        cursor.addRow(new Object[] {"CONTINUE", 1});
        cursor.addRow(new Object[] {"CONVERT", 1});
        cursor.addRow(new Object[] {"CPU", 0});
        cursor.addRow(new Object[] {"CREATE", 1});
        cursor.addRow(new Object[] {"CROSS", 1});
        cursor.addRow(new Object[] {"CUBE", 1});
        cursor.addRow(new Object[] {"CUME_DIST", 1});
        cursor.addRow(new Object[] {"CURRENT", 0});
        cursor.addRow(new Object[] {"CURRENT_DATE", 1});
        cursor.addRow(new Object[] {"CURRENT_TIME", 1});
        cursor.addRow(new Object[] {"CURRENT_TIMESTAMP", 1});
        cursor.addRow(new Object[] {"CURRENT_USER", 1});
        cursor.addRow(new Object[] {"CURSOR", 1});
        cursor.addRow(new Object[] {"CURSOR_NAME", 0});
        cursor.addRow(new Object[] {"DATA", 0});
        cursor.addRow(new Object[] {"DATABASE", 1});
        cursor.addRow(new Object[] {"DATABASES", 1});
        cursor.addRow(new Object[] {"DATAFILE", 0});
        cursor.addRow(new Object[] {"DATE", 0});
        cursor.addRow(new Object[] {"DATETIME", 0});
        cursor.addRow(new Object[] {"DAY", 0});
        cursor.addRow(new Object[] {"DAY_HOUR", 1});
        cursor.addRow(new Object[] {"DAY_MICROSECOND", 1});
        cursor.addRow(new Object[] {"DAY_MINUTE", 1});
        cursor.addRow(new Object[] {"DAY_SECOND", 1});
        cursor.addRow(new Object[] {"DEALLOCATE", 0});
        cursor.addRow(new Object[] {"DEC", 1});
        cursor.addRow(new Object[] {"DECIMAL", 1});
        cursor.addRow(new Object[] {"DECLARE", 1});
        cursor.addRow(new Object[] {"DEFAULT", 1});
        cursor.addRow(new Object[] {"DEFAULT_AUTH", 0});
        cursor.addRow(new Object[] {"DEFINER", 0});
        cursor.addRow(new Object[] {"DEFINITION", 0});
        cursor.addRow(new Object[] {"DELAYED", 1});
        cursor.addRow(new Object[] {"DELAY_KEY_WRITE", 0});
        cursor.addRow(new Object[] {"DELETE", 1});
        cursor.addRow(new Object[] {"DENSE_RANK", 1});
        cursor.addRow(new Object[] {"DESC", 1});
        cursor.addRow(new Object[] {"DESCRIBE", 1});
        cursor.addRow(new Object[] {"DESCRIPTION", 0});
        cursor.addRow(new Object[] {"DETERMINISTIC", 1});
        cursor.addRow(new Object[] {"DIAGNOSTICS", 0});
        cursor.addRow(new Object[] {"DIRECTORY", 0});
        cursor.addRow(new Object[] {"DISABLE", 0});
        cursor.addRow(new Object[] {"DISCARD", 0});
        cursor.addRow(new Object[] {"DISK", 0});
        cursor.addRow(new Object[] {"DISTINCT", 1});
        cursor.addRow(new Object[] {"DISTINCTROW", 1});
        cursor.addRow(new Object[] {"DIV", 1});
        cursor.addRow(new Object[] {"DO", 0});
        cursor.addRow(new Object[] {"DOUBLE", 1});
        cursor.addRow(new Object[] {"DROP", 1});
        cursor.addRow(new Object[] {"DUAL", 1});
        cursor.addRow(new Object[] {"DUMPFILE", 0});
        cursor.addRow(new Object[] {"DUPLICATE", 0});
        cursor.addRow(new Object[] {"DYNAMIC", 0});
        cursor.addRow(new Object[] {"EACH", 1});
        cursor.addRow(new Object[] {"ELSE", 1});
        cursor.addRow(new Object[] {"ELSEIF", 1});
        cursor.addRow(new Object[] {"EMPTY", 1});
        cursor.addRow(new Object[] {"ENABLE", 0});
        cursor.addRow(new Object[] {"ENCLOSED", 1});
        cursor.addRow(new Object[] {"ENCRYPTION", 0});
        cursor.addRow(new Object[] {"END", 0});
        cursor.addRow(new Object[] {"ENDS", 0});
        cursor.addRow(new Object[] {"ENFORCED", 0});
        cursor.addRow(new Object[] {"ENGINE", 0});
        cursor.addRow(new Object[] {"ENGINES", 0});
        cursor.addRow(new Object[] {"ENUM", 0});
        cursor.addRow(new Object[] {"ERROR", 0});
        cursor.addRow(new Object[] {"ERRORS", 0});
        cursor.addRow(new Object[] {"ESCAPE", 0});
        cursor.addRow(new Object[] {"ESCAPED", 1});
        cursor.addRow(new Object[] {"EVENT", 0});
        cursor.addRow(new Object[] {"EVENTS", 0});
        cursor.addRow(new Object[] {"EVERY", 0});
        cursor.addRow(new Object[] {"EXCEPT", 1});
        cursor.addRow(new Object[] {"EXCHANGE", 0});
        cursor.addRow(new Object[] {"EXCLUDE", 0});
        cursor.addRow(new Object[] {"EXECUTE", 0});
        cursor.addRow(new Object[] {"EXISTS", 1});
        cursor.addRow(new Object[] {"EXIT", 1});
        cursor.addRow(new Object[] {"EXPANSION", 0});
        cursor.addRow(new Object[] {"EXPIRE", 0});
        cursor.addRow(new Object[] {"EXPLAIN", 1});
        cursor.addRow(new Object[] {"EXPORT", 0});
        cursor.addRow(new Object[] {"EXTENDED", 0});
        cursor.addRow(new Object[] {"EXTENT_SIZE", 0});
        cursor.addRow(new Object[] {"FALSE", 1});
        cursor.addRow(new Object[] {"FAST", 0});
        cursor.addRow(new Object[] {"FAULTS", 0});
        cursor.addRow(new Object[] {"FETCH", 1});
        cursor.addRow(new Object[] {"FIELDS", 0});
        cursor.addRow(new Object[] {"FILE", 0});
        cursor.addRow(new Object[] {"FILE_BLOCK_SIZE", 0});
        cursor.addRow(new Object[] {"FILTER", 0});
        cursor.addRow(new Object[] {"FIRST", 0});
        cursor.addRow(new Object[] {"FIRST_VALUE", 1});
        cursor.addRow(new Object[] {"FIXED", 0});
        cursor.addRow(new Object[] {"FLOAT", 1});
        cursor.addRow(new Object[] {"FLOAT4", 1});
        cursor.addRow(new Object[] {"FLOAT8", 1});
        cursor.addRow(new Object[] {"FLUSH", 0});
        cursor.addRow(new Object[] {"FOLLOWING", 0});
        cursor.addRow(new Object[] {"FOLLOWS", 0});
        cursor.addRow(new Object[] {"FOR", 1});
        cursor.addRow(new Object[] {"FORCE", 1});
        cursor.addRow(new Object[] {"FOREIGN", 1});
        cursor.addRow(new Object[] {"FORMAT", 0});
        cursor.addRow(new Object[] {"FOUND", 0});
        cursor.addRow(new Object[] {"FROM", 1});
        cursor.addRow(new Object[] {"FULL", 0});
        cursor.addRow(new Object[] {"FULLTEXT", 1});
        cursor.addRow(new Object[] {"FUNCTION", 1});
        cursor.addRow(new Object[] {"GENERAL", 0});
        cursor.addRow(new Object[] {"GENERATED", 1});
        cursor.addRow(new Object[] {"GEOMCOLLECTION", 0});
        cursor.addRow(new Object[] {"GEOMETRY", 0});
        cursor.addRow(new Object[] {"GEOMETRYCOLLECTION", 0});
        cursor.addRow(new Object[] {"GET", 1});
        cursor.addRow(new Object[] {"GET_FORMAT", 0});
        cursor.addRow(new Object[] {"GET_MASTER_PUBLIC_KEY", 0});
        cursor.addRow(new Object[] {"GLOBAL", 0});
        cursor.addRow(new Object[] {"GRANT", 1});
        cursor.addRow(new Object[] {"GRANTS", 0});
        cursor.addRow(new Object[] {"GROUP", 1});
        cursor.addRow(new Object[] {"GROUPING", 1});
        cursor.addRow(new Object[] {"GROUPS", 1});
        cursor.addRow(new Object[] {"GROUP_REPLICATION", 0});
        cursor.addRow(new Object[] {"HANDLER", 0});
        cursor.addRow(new Object[] {"HASH", 0});
        cursor.addRow(new Object[] {"HAVING", 1});
        cursor.addRow(new Object[] {"HELP", 0});
        cursor.addRow(new Object[] {"HIGH_PRIORITY", 1});
        cursor.addRow(new Object[] {"HISTOGRAM", 0});
        cursor.addRow(new Object[] {"HISTORY", 0});
        cursor.addRow(new Object[] {"HOST", 0});
        cursor.addRow(new Object[] {"HOSTS", 0});
        cursor.addRow(new Object[] {"HOUR", 0});
        cursor.addRow(new Object[] {"HOUR_MICROSECOND", 1});
        cursor.addRow(new Object[] {"HOUR_MINUTE", 1});
        cursor.addRow(new Object[] {"HOUR_SECOND", 1});
        cursor.addRow(new Object[] {"IDENTIFIED", 0});
        cursor.addRow(new Object[] {"IF", 1});
        cursor.addRow(new Object[] {"IGNORE", 1});
        cursor.addRow(new Object[] {"IGNORE_SERVER_IDS", 0});
        cursor.addRow(new Object[] {"IMPORT", 0});
        cursor.addRow(new Object[] {"IN", 1});
        cursor.addRow(new Object[] {"INACTIVE", 0});
        cursor.addRow(new Object[] {"INDEX", 1});
        cursor.addRow(new Object[] {"INDEXES", 0});
        cursor.addRow(new Object[] {"INFILE", 1});
        cursor.addRow(new Object[] {"INITIAL_SIZE", 0});
        cursor.addRow(new Object[] {"INNER", 1});
        cursor.addRow(new Object[] {"INOUT", 1});
        cursor.addRow(new Object[] {"INSENSITIVE", 1});
        cursor.addRow(new Object[] {"INSERT", 1});
        cursor.addRow(new Object[] {"INSERT_METHOD", 0});
        cursor.addRow(new Object[] {"INSTALL", 0});
        cursor.addRow(new Object[] {"INSTANCE", 0});
        cursor.addRow(new Object[] {"INT", 1});
        cursor.addRow(new Object[] {"INT1", 1});
        cursor.addRow(new Object[] {"INT2", 1});
        cursor.addRow(new Object[] {"INT3", 1});
        cursor.addRow(new Object[] {"INT4", 1});
        cursor.addRow(new Object[] {"INT8", 1});
        cursor.addRow(new Object[] {"INTEGER", 1});
        cursor.addRow(new Object[] {"INTERVAL", 1});
        cursor.addRow(new Object[] {"INTO", 1});
        cursor.addRow(new Object[] {"INVISIBLE", 0});
        cursor.addRow(new Object[] {"INVOKER", 0});
        cursor.addRow(new Object[] {"IO", 0});
        cursor.addRow(new Object[] {"IO_AFTER_GTIDS", 1});
        cursor.addRow(new Object[] {"IO_BEFORE_GTIDS", 1});
        cursor.addRow(new Object[] {"IO_THREAD", 0});
        cursor.addRow(new Object[] {"IPC", 0});
        cursor.addRow(new Object[] {"IS", 1});
        cursor.addRow(new Object[] {"ISOLATION", 0});
        cursor.addRow(new Object[] {"ISSUER", 0});
        cursor.addRow(new Object[] {"ITERATE", 1});
        cursor.addRow(new Object[] {"JOIN", 1});
        cursor.addRow(new Object[] {"JSON", 0});
        cursor.addRow(new Object[] {"JSON_TABLE", 1});
        cursor.addRow(new Object[] {"KEY", 1});
        cursor.addRow(new Object[] {"KEYS", 1});
        cursor.addRow(new Object[] {"KEY_BLOCK_SIZE", 0});
        cursor.addRow(new Object[] {"KILL", 1});
        cursor.addRow(new Object[] {"LAG", 1});
        cursor.addRow(new Object[] {"LANGUAGE", 0});
        cursor.addRow(new Object[] {"LAST", 0});
        cursor.addRow(new Object[] {"LAST_VALUE", 1});
        cursor.addRow(new Object[] {"LATERAL", 1});
        cursor.addRow(new Object[] {"LEAD", 1});
        cursor.addRow(new Object[] {"LEADING", 1});
        cursor.addRow(new Object[] {"LEAVE", 1});
        cursor.addRow(new Object[] {"LEAVES", 0});
        cursor.addRow(new Object[] {"LEFT", 1});
        cursor.addRow(new Object[] {"LESS", 0});
        cursor.addRow(new Object[] {"LEVEL", 0});
        cursor.addRow(new Object[] {"LIKE", 1});
        cursor.addRow(new Object[] {"LIMIT", 1});
        cursor.addRow(new Object[] {"LINEAR", 1});
        cursor.addRow(new Object[] {"LINES", 1});
        cursor.addRow(new Object[] {"LINESTRING", 0});
        cursor.addRow(new Object[] {"LIST", 0});
        cursor.addRow(new Object[] {"LOAD", 1});
        cursor.addRow(new Object[] {"LOCAL", 0});
        cursor.addRow(new Object[] {"LOCALTIME", 1});
        cursor.addRow(new Object[] {"LOCALTIMESTAMP", 1});
        cursor.addRow(new Object[] {"LOCK", 1});
        cursor.addRow(new Object[] {"LOCKED", 0});
        cursor.addRow(new Object[] {"LOCKS", 0});
        cursor.addRow(new Object[] {"LOGFILE", 0});
        cursor.addRow(new Object[] {"LOGS", 0});
        cursor.addRow(new Object[] {"LONG", 1});
        cursor.addRow(new Object[] {"LONGBLOB", 1});
        cursor.addRow(new Object[] {"LONGTEXT", 1});
        cursor.addRow(new Object[] {"LOOP", 1});
        cursor.addRow(new Object[] {"LOW_PRIORITY", 1});
        cursor.addRow(new Object[] {"MASTER", 0});
        cursor.addRow(new Object[] {"MASTER_AUTO_POSITION", 0});
        cursor.addRow(new Object[] {"MASTER_BIND", 1});
        cursor.addRow(new Object[] {"MASTER_CONNECT_RETRY", 0});
        cursor.addRow(new Object[] {"MASTER_DELAY", 0});
        cursor.addRow(new Object[] {"MASTER_HEARTBEAT_PERIOD", 0});
        cursor.addRow(new Object[] {"MASTER_HOST", 0});
        cursor.addRow(new Object[] {"MASTER_LOG_FILE", 0});
        cursor.addRow(new Object[] {"MASTER_LOG_POS", 0});
        cursor.addRow(new Object[] {"MASTER_PASSWORD", 0});
        cursor.addRow(new Object[] {"MASTER_PORT", 0});
        cursor.addRow(new Object[] {"MASTER_PUBLIC_KEY_PATH", 0});
        cursor.addRow(new Object[] {"MASTER_RETRY_COUNT", 0});
        cursor.addRow(new Object[] {"MASTER_SERVER_ID", 0});
        cursor.addRow(new Object[] {"MASTER_SSL", 0});
        cursor.addRow(new Object[] {"MASTER_SSL_CA", 0});
        cursor.addRow(new Object[] {"MASTER_SSL_CAPATH", 0});
        cursor.addRow(new Object[] {"MASTER_SSL_CERT", 0});
        cursor.addRow(new Object[] {"MASTER_SSL_CIPHER", 0});
        cursor.addRow(new Object[] {"MASTER_SSL_CRL", 0});
        cursor.addRow(new Object[] {"MASTER_SSL_CRLPATH", 0});
        cursor.addRow(new Object[] {"MASTER_SSL_KEY", 0});
        cursor.addRow(new Object[] {"MASTER_SSL_VERIFY_SERVER_CERT", 1});
        cursor.addRow(new Object[] {"MASTER_TLS_VERSION", 0});
        cursor.addRow(new Object[] {"MASTER_USER", 0});
        cursor.addRow(new Object[] {"MATCH", 1});
        cursor.addRow(new Object[] {"MAXVALUE", 1});
        cursor.addRow(new Object[] {"MAX_CONNECTIONS_PER_HOUR", 0});
        cursor.addRow(new Object[] {"MAX_QUERIES_PER_HOUR", 0});
        cursor.addRow(new Object[] {"MAX_ROWS", 0});
        cursor.addRow(new Object[] {"MAX_SIZE", 0});
        cursor.addRow(new Object[] {"MAX_UPDATES_PER_HOUR", 0});
        cursor.addRow(new Object[] {"MAX_USER_CONNECTIONS", 0});
        cursor.addRow(new Object[] {"MEDIUM", 0});
        cursor.addRow(new Object[] {"MEDIUMBLOB", 1});
        cursor.addRow(new Object[] {"MEDIUMINT", 1});
        cursor.addRow(new Object[] {"MEDIUMTEXT", 1});
        cursor.addRow(new Object[] {"MEMORY", 0});
        cursor.addRow(new Object[] {"MERGE", 0});
        cursor.addRow(new Object[] {"MESSAGE_TEXT", 0});
        cursor.addRow(new Object[] {"MICROSECOND", 0});
        cursor.addRow(new Object[] {"MIDDLEINT", 1});
        cursor.addRow(new Object[] {"MIGRATE", 0});
        cursor.addRow(new Object[] {"MINUTE", 0});
        cursor.addRow(new Object[] {"MINUTE_MICROSECOND", 1});
        cursor.addRow(new Object[] {"MINUTE_SECOND", 1});
        cursor.addRow(new Object[] {"MIN_ROWS", 0});
        cursor.addRow(new Object[] {"MOD", 1});
        cursor.addRow(new Object[] {"MODE", 0});
        cursor.addRow(new Object[] {"MODIFIES", 1});
        cursor.addRow(new Object[] {"MODIFY", 0});
        cursor.addRow(new Object[] {"MONTH", 0});
        cursor.addRow(new Object[] {"MULTILINESTRING", 0});
        cursor.addRow(new Object[] {"MULTIPOINT", 0});
        cursor.addRow(new Object[] {"MULTIPOLYGON", 0});
        cursor.addRow(new Object[] {"MUTEX", 0});
        cursor.addRow(new Object[] {"MYSQL_ERRNO", 0});
        cursor.addRow(new Object[] {"NAME", 0});
        cursor.addRow(new Object[] {"NAMES", 0});
        cursor.addRow(new Object[] {"NATIONAL", 0});
        cursor.addRow(new Object[] {"NATURAL", 1});
        cursor.addRow(new Object[] {"NCHAR", 0});
        cursor.addRow(new Object[] {"NDB", 0});
        cursor.addRow(new Object[] {"NDBCLUSTER", 0});
        cursor.addRow(new Object[] {"NESTED", 0});
        cursor.addRow(new Object[] {"NETWORK_NAMESPACE", 0});
        cursor.addRow(new Object[] {"NEVER", 0});
        cursor.addRow(new Object[] {"NEW", 0});
        cursor.addRow(new Object[] {"NEXT", 0});
        cursor.addRow(new Object[] {"NO", 0});
        cursor.addRow(new Object[] {"NODEGROUP", 0});
        cursor.addRow(new Object[] {"NONE", 0});
        cursor.addRow(new Object[] {"NOT", 1});
        cursor.addRow(new Object[] {"NOWAIT", 0});
        cursor.addRow(new Object[] {"NO_WAIT", 0});
        cursor.addRow(new Object[] {"NO_WRITE_TO_BINLOG", 1});
        cursor.addRow(new Object[] {"NTH_VALUE", 1});
        cursor.addRow(new Object[] {"NTILE", 1});
        cursor.addRow(new Object[] {"NULL", 1});
        cursor.addRow(new Object[] {"NULLS", 0});
        cursor.addRow(new Object[] {"NUMBER", 0});
        cursor.addRow(new Object[] {"NUMERIC", 1});
        cursor.addRow(new Object[] {"NVARCHAR", 0});
        cursor.addRow(new Object[] {"OF", 1});
        cursor.addRow(new Object[] {"OFFSET", 0});
        cursor.addRow(new Object[] {"OJ", 0});
        cursor.addRow(new Object[] {"OLD", 0});
        cursor.addRow(new Object[] {"ON", 1});
        cursor.addRow(new Object[] {"ONE", 0});
        cursor.addRow(new Object[] {"ONLY", 0});
        cursor.addRow(new Object[] {"OPEN", 0});
        cursor.addRow(new Object[] {"OPTIMIZE", 1});
        cursor.addRow(new Object[] {"OPTIMIZER_COSTS", 1});
        cursor.addRow(new Object[] {"OPTION", 1});
        cursor.addRow(new Object[] {"OPTIONAL", 0});
        cursor.addRow(new Object[] {"OPTIONALLY", 1});
        cursor.addRow(new Object[] {"OPTIONS", 0});
        cursor.addRow(new Object[] {"OR", 1});
        cursor.addRow(new Object[] {"ORDER", 1});
        cursor.addRow(new Object[] {"ORDINALITY", 0});
        cursor.addRow(new Object[] {"ORGANIZATION", 0});
        cursor.addRow(new Object[] {"OTHERS", 0});
        cursor.addRow(new Object[] {"OUT", 1});
        cursor.addRow(new Object[] {"OUTER", 1});
        cursor.addRow(new Object[] {"OUTFILE", 1});
        cursor.addRow(new Object[] {"OVER", 1});
        cursor.addRow(new Object[] {"OWNER", 0});
        cursor.addRow(new Object[] {"PACK_KEYS", 0});
        cursor.addRow(new Object[] {"PAGE", 0});
        cursor.addRow(new Object[] {"PARSER", 0});
        cursor.addRow(new Object[] {"PARTIAL", 0});
        cursor.addRow(new Object[] {"PARTITION", 1});
        cursor.addRow(new Object[] {"PARTITIONING", 0});
        cursor.addRow(new Object[] {"PARTITIONS", 0});
        cursor.addRow(new Object[] {"PASSWORD", 0});
        cursor.addRow(new Object[] {"PATH", 0});
        cursor.addRow(new Object[] {"PERCENT_RANK", 1});
        cursor.addRow(new Object[] {"PERSIST", 0});
        cursor.addRow(new Object[] {"PERSIST_ONLY", 0});
        cursor.addRow(new Object[] {"PHASE", 0});
        cursor.addRow(new Object[] {"PLUGIN", 0});
        cursor.addRow(new Object[] {"PLUGINS", 0});
        cursor.addRow(new Object[] {"PLUGIN_DIR", 0});
        cursor.addRow(new Object[] {"POINT", 0});
        cursor.addRow(new Object[] {"POLYGON", 0});
        cursor.addRow(new Object[] {"PORT", 0});
        cursor.addRow(new Object[] {"PRECEDES", 0});
        cursor.addRow(new Object[] {"PRECEDING", 0});
        cursor.addRow(new Object[] {"PRECISION", 1});
        cursor.addRow(new Object[] {"PREPARE", 0});
        cursor.addRow(new Object[] {"PRESERVE", 0});
        cursor.addRow(new Object[] {"PREV", 0});
        cursor.addRow(new Object[] {"PRIMARY", 1});
        cursor.addRow(new Object[] {"PRIVILEGES", 0});
        cursor.addRow(new Object[] {"PROCEDURE", 1});
        cursor.addRow(new Object[] {"PROCESS", 0});
        cursor.addRow(new Object[] {"PROCESSLIST", 0});
        cursor.addRow(new Object[] {"PROFILE", 0});
        cursor.addRow(new Object[] {"PROFILES", 0});
        cursor.addRow(new Object[] {"PROXY", 0});
        cursor.addRow(new Object[] {"PURGE", 1});
        cursor.addRow(new Object[] {"QUARTER", 0});
        cursor.addRow(new Object[] {"QUERY", 0});
        cursor.addRow(new Object[] {"QUICK", 0});
        cursor.addRow(new Object[] {"RANGE", 1});
        cursor.addRow(new Object[] {"RANK", 1});
        cursor.addRow(new Object[] {"READ", 1});
        cursor.addRow(new Object[] {"READS", 1});
        cursor.addRow(new Object[] {"READ_ONLY", 0});
        cursor.addRow(new Object[] {"READ_WRITE", 1});
        cursor.addRow(new Object[] {"REAL", 1});
        cursor.addRow(new Object[] {"REBUILD", 0});
        cursor.addRow(new Object[] {"RECOVER", 0});
        cursor.addRow(new Object[] {"RECURSIVE", 1});
        cursor.addRow(new Object[] {"REDO_BUFFER_SIZE", 0});
        cursor.addRow(new Object[] {"REDUNDANT", 0});
        cursor.addRow(new Object[] {"REFERENCE", 0});
        cursor.addRow(new Object[] {"REFERENCES", 1});
        cursor.addRow(new Object[] {"REGEXP", 1});
        cursor.addRow(new Object[] {"RELAY", 0});
        cursor.addRow(new Object[] {"RELAYLOG", 0});
        cursor.addRow(new Object[] {"RELAY_LOG_FILE", 0});
        cursor.addRow(new Object[] {"RELAY_LOG_POS", 0});
        cursor.addRow(new Object[] {"RELAY_THREAD", 0});
        cursor.addRow(new Object[] {"RELEASE", 1});
        cursor.addRow(new Object[] {"RELOAD", 0});
        cursor.addRow(new Object[] {"REMOVE", 0});
        cursor.addRow(new Object[] {"RENAME", 1});
        cursor.addRow(new Object[] {"REORGANIZE", 0});
        cursor.addRow(new Object[] {"REPAIR", 0});
        cursor.addRow(new Object[] {"REPEAT", 1});
        cursor.addRow(new Object[] {"REPEATABLE", 0});
        cursor.addRow(new Object[] {"REPLACE", 1});
        cursor.addRow(new Object[] {"REPLICATE_DO_DB", 0});
        cursor.addRow(new Object[] {"REPLICATE_DO_TABLE", 0});
        cursor.addRow(new Object[] {"REPLICATE_IGNORE_DB", 0});
        cursor.addRow(new Object[] {"REPLICATE_IGNORE_TABLE", 0});
        cursor.addRow(new Object[] {"REPLICATE_REWRITE_DB", 0});
        cursor.addRow(new Object[] {"REPLICATE_WILD_DO_TABLE", 0});
        cursor.addRow(new Object[] {"REPLICATE_WILD_IGNORE_TABLE", 0});
        cursor.addRow(new Object[] {"REPLICATION", 0});
        cursor.addRow(new Object[] {"REQUIRE", 1});
        cursor.addRow(new Object[] {"RESET", 0});
        cursor.addRow(new Object[] {"RESIGNAL", 1});
        cursor.addRow(new Object[] {"RESOURCE", 0});
        cursor.addRow(new Object[] {"RESPECT", 0});
        cursor.addRow(new Object[] {"RESTART", 0});
        cursor.addRow(new Object[] {"RESTORE", 0});
        cursor.addRow(new Object[] {"RESTRICT", 1});
        cursor.addRow(new Object[] {"RESUME", 0});
        cursor.addRow(new Object[] {"RETAIN", 0});
        cursor.addRow(new Object[] {"RETURN", 1});
        cursor.addRow(new Object[] {"RETURNED_SQLSTATE", 0});
        cursor.addRow(new Object[] {"RETURNS", 0});
        cursor.addRow(new Object[] {"REUSE", 0});
        cursor.addRow(new Object[] {"REVERSE", 0});
        cursor.addRow(new Object[] {"REVOKE", 1});
        cursor.addRow(new Object[] {"RIGHT", 1});
        cursor.addRow(new Object[] {"RLIKE", 1});
        cursor.addRow(new Object[] {"ROLE", 0});
        cursor.addRow(new Object[] {"ROLLBACK", 0});
        cursor.addRow(new Object[] {"ROLLUP", 0});
        cursor.addRow(new Object[] {"ROTATE", 0});
        cursor.addRow(new Object[] {"ROUTINE", 0});
        cursor.addRow(new Object[] {"ROW", 1});
        cursor.addRow(new Object[] {"ROWS", 1});
        cursor.addRow(new Object[] {"ROW_COUNT", 0});
        cursor.addRow(new Object[] {"ROW_FORMAT", 0});
        cursor.addRow(new Object[] {"ROW_NUMBER", 1});
        cursor.addRow(new Object[] {"RTREE", 0});
        cursor.addRow(new Object[] {"SAVEPOINT", 0});
        cursor.addRow(new Object[] {"SCHEDULE", 0});
        cursor.addRow(new Object[] {"SCHEMA", 1});
        cursor.addRow(new Object[] {"SCHEMAS", 1});
        cursor.addRow(new Object[] {"SCHEMA_NAME", 0});
        cursor.addRow(new Object[] {"SECOND", 0});
        cursor.addRow(new Object[] {"SECONDARY", 0});
        cursor.addRow(new Object[] {"SECONDARY_ENGINE", 0});
        cursor.addRow(new Object[] {"SECONDARY_LOAD", 0});
        cursor.addRow(new Object[] {"SECONDARY_UNLOAD", 0});
        cursor.addRow(new Object[] {"SECOND_MICROSECOND", 1});
        cursor.addRow(new Object[] {"SECURITY", 0});
        cursor.addRow(new Object[] {"SELECT", 1});
        cursor.addRow(new Object[] {"SENSITIVE", 1});
        cursor.addRow(new Object[] {"SEPARATOR", 1});
        cursor.addRow(new Object[] {"SERIAL", 0});
        cursor.addRow(new Object[] {"SERIALIZABLE", 0});
        cursor.addRow(new Object[] {"SERVER", 0});
        cursor.addRow(new Object[] {"SESSION", 0});
        cursor.addRow(new Object[] {"SET", 1});
        cursor.addRow(new Object[] {"SHARE", 0});
        cursor.addRow(new Object[] {"SHOW", 1});
        cursor.addRow(new Object[] {"SHUTDOWN", 0});
        cursor.addRow(new Object[] {"SIGNAL", 1});
        cursor.addRow(new Object[] {"SIGNED", 0});
        cursor.addRow(new Object[] {"SIMPLE", 0});
        cursor.addRow(new Object[] {"SKIP", 0});
        cursor.addRow(new Object[] {"SLAVE", 0});
        cursor.addRow(new Object[] {"SLOW", 0});
        cursor.addRow(new Object[] {"SMALLINT", 1});
        cursor.addRow(new Object[] {"SNAPSHOT", 0});
        cursor.addRow(new Object[] {"SOCKET", 0});
        cursor.addRow(new Object[] {"SOME", 0});
        cursor.addRow(new Object[] {"SONAME", 0});
        cursor.addRow(new Object[] {"SOUNDS", 0});
        cursor.addRow(new Object[] {"SOURCE", 0});
        cursor.addRow(new Object[] {"SPATIAL", 1});
        cursor.addRow(new Object[] {"SPECIFIC", 1});
        cursor.addRow(new Object[] {"SQL", 1});
        cursor.addRow(new Object[] {"SQLEXCEPTION", 1});
        cursor.addRow(new Object[] {"SQLSTATE", 1});
        cursor.addRow(new Object[] {"SQLWARNING", 1});
        cursor.addRow(new Object[] {"SQL_AFTER_GTIDS", 0});
        cursor.addRow(new Object[] {"SQL_AFTER_MTS_GAPS", 0});
        cursor.addRow(new Object[] {"SQL_BEFORE_GTIDS", 0});
        cursor.addRow(new Object[] {"SQL_BIG_RESULT", 1});
        cursor.addRow(new Object[] {"SQL_BUFFER_RESULT", 0});
        cursor.addRow(new Object[] {"SQL_CALC_FOUND_ROWS", 1});
        cursor.addRow(new Object[] {"SQL_NO_CACHE", 0});
        cursor.addRow(new Object[] {"SQL_SMALL_RESULT", 1});
        cursor.addRow(new Object[] {"SQL_THREAD", 0});
        cursor.addRow(new Object[] {"SQL_TSI_DAY", 0});
        cursor.addRow(new Object[] {"SQL_TSI_HOUR", 0});
        cursor.addRow(new Object[] {"SQL_TSI_MINUTE", 0});
        cursor.addRow(new Object[] {"SQL_TSI_MONTH", 0});
        cursor.addRow(new Object[] {"SQL_TSI_QUARTER", 0});
        cursor.addRow(new Object[] {"SQL_TSI_SECOND", 0});
        cursor.addRow(new Object[] {"SQL_TSI_WEEK", 0});
        cursor.addRow(new Object[] {"SQL_TSI_YEAR", 0});
        cursor.addRow(new Object[] {"SRID", 0});
        cursor.addRow(new Object[] {"SSL", 1});
        cursor.addRow(new Object[] {"STACKED", 0});
        cursor.addRow(new Object[] {"START", 0});
        cursor.addRow(new Object[] {"STARTING", 1});
        cursor.addRow(new Object[] {"STARTS", 0});
        cursor.addRow(new Object[] {"STATS_AUTO_RECALC", 0});
        cursor.addRow(new Object[] {"STATS_PERSISTENT", 0});
        cursor.addRow(new Object[] {"STATS_SAMPLE_PAGES", 0});
        cursor.addRow(new Object[] {"STATUS", 0});
        cursor.addRow(new Object[] {"STOP", 0});
        cursor.addRow(new Object[] {"STORAGE", 0});
        cursor.addRow(new Object[] {"STORED", 1});
        cursor.addRow(new Object[] {"STRAIGHT_JOIN", 1});
        cursor.addRow(new Object[] {"STRING", 0});
        cursor.addRow(new Object[] {"SUBCLASS_ORIGIN", 0});
        cursor.addRow(new Object[] {"SUBJECT", 0});
        cursor.addRow(new Object[] {"SUBPARTITION", 0});
        cursor.addRow(new Object[] {"SUBPARTITIONS", 0});
        cursor.addRow(new Object[] {"SUPER", 0});
        cursor.addRow(new Object[] {"SUSPEND", 0});
        cursor.addRow(new Object[] {"SWAPS", 0});
        cursor.addRow(new Object[] {"SWITCHES", 0});
        cursor.addRow(new Object[] {"SYSTEM", 1});
        cursor.addRow(new Object[] {"TABLE", 1});
        cursor.addRow(new Object[] {"TABLES", 0});
        cursor.addRow(new Object[] {"TABLESPACE", 0});
        cursor.addRow(new Object[] {"TABLE_CHECKSUM", 0});
        cursor.addRow(new Object[] {"TABLE_NAME", 0});
        cursor.addRow(new Object[] {"TEMPORARY", 0});
        cursor.addRow(new Object[] {"TEMPTABLE", 0});
        cursor.addRow(new Object[] {"TERMINATED", 1});
        cursor.addRow(new Object[] {"TEXT", 0});
        cursor.addRow(new Object[] {"THAN", 0});
        cursor.addRow(new Object[] {"THEN", 1});
        cursor.addRow(new Object[] {"THREAD_PRIORITY", 0});
        cursor.addRow(new Object[] {"TIES", 0});
        cursor.addRow(new Object[] {"TIME", 0});
        cursor.addRow(new Object[] {"TIMESTAMP", 0});
        cursor.addRow(new Object[] {"TIMESTAMPADD", 0});
        cursor.addRow(new Object[] {"TIMESTAMPDIFF", 0});
        cursor.addRow(new Object[] {"TINYBLOB", 1});
        cursor.addRow(new Object[] {"TINYINT", 1});
        cursor.addRow(new Object[] {"TINYTEXT", 1});
        cursor.addRow(new Object[] {"TO", 1});
        cursor.addRow(new Object[] {"TRAILING", 1});
        cursor.addRow(new Object[] {"TRANSACTION", 0});
        cursor.addRow(new Object[] {"TRIGGER", 1});
        cursor.addRow(new Object[] {"TRIGGERS", 0});
        cursor.addRow(new Object[] {"TRUE", 1});
        cursor.addRow(new Object[] {"TRUNCATE", 0});
        cursor.addRow(new Object[] {"TYPE", 0});
        cursor.addRow(new Object[] {"TYPES", 0});
        cursor.addRow(new Object[] {"UNBOUNDED", 0});
        cursor.addRow(new Object[] {"UNCOMMITTED", 0});
        cursor.addRow(new Object[] {"UNDEFINED", 0});
        cursor.addRow(new Object[] {"UNDO", 1});
        cursor.addRow(new Object[] {"UNDOFILE", 0});
        cursor.addRow(new Object[] {"UNDO_BUFFER_SIZE", 0});
        cursor.addRow(new Object[] {"UNICODE", 0});
        cursor.addRow(new Object[] {"UNINSTALL", 0});
        cursor.addRow(new Object[] {"UNION", 1});
        cursor.addRow(new Object[] {"UNIQUE", 1});
        cursor.addRow(new Object[] {"UNKNOWN", 0});
        cursor.addRow(new Object[] {"UNLOCK", 1});
        cursor.addRow(new Object[] {"UNSIGNED", 1});
        cursor.addRow(new Object[] {"UNTIL", 0});
        cursor.addRow(new Object[] {"UPDATE", 1});
        cursor.addRow(new Object[] {"UPGRADE", 0});
        cursor.addRow(new Object[] {"USAGE", 1});
        cursor.addRow(new Object[] {"USE", 1});
        cursor.addRow(new Object[] {"USER", 0});
        cursor.addRow(new Object[] {"USER_RESOURCES", 0});
        cursor.addRow(new Object[] {"USE_FRM", 0});
        cursor.addRow(new Object[] {"USING", 1});
        cursor.addRow(new Object[] {"UTC_DATE", 1});
        cursor.addRow(new Object[] {"UTC_TIME", 1});
        cursor.addRow(new Object[] {"UTC_TIMESTAMP", 1});
        cursor.addRow(new Object[] {"VALIDATION", 0});
        cursor.addRow(new Object[] {"VALUE", 0});
        cursor.addRow(new Object[] {"VALUES", 1});
        cursor.addRow(new Object[] {"VARBINARY", 1});
        cursor.addRow(new Object[] {"VARCHAR", 1});
        cursor.addRow(new Object[] {"VARCHARACTER", 1});
        cursor.addRow(new Object[] {"VARIABLES", 0});
        cursor.addRow(new Object[] {"VARYING", 1});
        cursor.addRow(new Object[] {"VCPU", 0});
        cursor.addRow(new Object[] {"VIEW", 0});
        cursor.addRow(new Object[] {"VIRTUAL", 1});
        cursor.addRow(new Object[] {"VISIBLE", 0});
        cursor.addRow(new Object[] {"WAIT", 0});
        cursor.addRow(new Object[] {"WARNINGS", 0});
        cursor.addRow(new Object[] {"WEEK", 0});
        cursor.addRow(new Object[] {"WEIGHT_STRING", 0});
        cursor.addRow(new Object[] {"WHEN", 1});
        cursor.addRow(new Object[] {"WHERE", 1});
        cursor.addRow(new Object[] {"WHILE", 1});
        cursor.addRow(new Object[] {"WINDOW", 1});
        cursor.addRow(new Object[] {"WITH", 1});
        cursor.addRow(new Object[] {"WITHOUT", 0});
        cursor.addRow(new Object[] {"WORK", 0});
        cursor.addRow(new Object[] {"WRAPPER", 0});
        cursor.addRow(new Object[] {"WRITE", 1});
        cursor.addRow(new Object[] {"X509", 0});
        cursor.addRow(new Object[] {"XA", 0});
        cursor.addRow(new Object[] {"XID", 0});
        cursor.addRow(new Object[] {"XML", 0});
        cursor.addRow(new Object[] {"XOR", 1});
        cursor.addRow(new Object[] {"YEAR", 0});
        cursor.addRow(new Object[] {"YEAR_MONTH", 1});
        cursor.addRow(new Object[] {"ZEROFILL", 1});
        return cursor;
    }
}
